/*
* leetcode 338. 比特位计数
* 
给你一个整数 n ，对于 0 <= i <= n 中的每个 i ，计算其二进制表示中 1 的个数 ，返回一个长度为 n + 1 的数组 ans 作为答案。

示例 1：

输入：n = 2
输出：[0,1,1]
解释：
0 --> 0
1 --> 1
2 --> 10
* */
/*

* */
class Solution {
    public static int hammingWeight(int n) {
        int count=0;
        while(n>0){
            if(n%2==1)count++;
            n>>=1;
        }
        return count;
    }
    public int[] countBits(int n) {
        int[] arr=new int[n+1];
        for(int i=0;i<=n;i++){
            arr[i]=hammingWeight(i);
        }
        return arr;
    }
}
//数学法
class Solution2 {
    public int[] countBits(int n) {
        int[] arr=new int[n+1];
        for(int i=0;i<=n;i++){
            if(i%2==0)arr[i]=arr[i/2];
            else arr[i]=arr[i/2]+1;
        }
        return arr;
    }
}